package com.bp.hearthealth.pulse.lnapps.bp_utils

import android.app.Activity
import android.content.Context
import android.text.Editable
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import com.bp.hearthealth.pulse.lnapps.BpApplication
import java.util.Timer
import java.util.TimerTask

object BpInputValidator {

    /**
     * 验证输入的 [Editable] 对象是否表示的整数值位于指定的范围内。
     *
     * @param editable 要验证的 [Editable] 对象，可以是用户输入的文本。
     * @param min 要验证的最小值（范围包含该值）。
     * @param max 要验证的最大值（范围包含该值）。
     * @return 如果输入的整数值在指定的范围内，则返回 true；否则返回 false。
     */
    fun validateIntegerRange(editable: Editable?, min: Int, max: Int): Boolean {
        if (!editable.isNullOrEmpty()) {
            val input = editable.toString()
            if (input.isNotEmpty() && input.first() == '0') {
                // 如果输入以0开头，则返回false
                editable.clear()
                return false
            }
            return try {
                val number = input.toInt()
                number in min..max
            } catch (e: NumberFormatException) {
                // 输入无法转换为整数，可以根据需要进行处理
                false
            }
        }
        return false
    }


    /**
     * 验证输入的 [Editable] 对象是否表示的整数值大于等于指定的最小值，
     * 并且不以0开头。
     *
     * @param editable 要验证的 [Editable] 对象，可以是用户输入的文本。
     * @param minValue 要验证的最小值。
     * @return 如果输入的整数值大于等于最小值且不以0开头，则返回 true；否则返回 false。
     */
    fun validateMinValue(editable: Editable?, minValue: Int): Boolean {
        if (!editable.isNullOrEmpty()) {
            return try {
                val number = editable.toString().toInt()
                number >= minValue && !editable.startsWith("0")
            } catch (e: NumberFormatException) {
                // 输入无法转换为整数，可以根据需要进行处理
                false
            }
        }
        return false
    }

    /**
     * 隐藏软键盘
     *
     * @param activity 要隐藏软键盘的activity
     */
    //    public static void hideSoftKeyBoard(Activity activity) {
    //        final View v = activity.getWindow().peekDecorView();
    //        if (v != null && v.getWindowToken() != null) {
    //            try {
    //                ((InputMethodManager) activity.getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(activity.getCurrentFocus()
    //                        .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    //            } catch (Exception e) {
    //                Log.w("TAG", e.toString());
    //            }
    //        }
    //    }
    /**
     * 自动弹软键盘
     *
     * @param context
     * @param et
     */
    fun showSoftInput(context: Context, et: EditText) {
        Timer().schedule(object : TimerTask() {
            override fun run() {
                (context as Activity).runOnUiThread {
                    et.isFocusable = true
                    et.isFocusableInTouchMode = true
                    //请求获得焦点
                    et.requestFocus()
                    //调用系统输入法
                    val inputManager = et
                        .context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                    inputManager.showSoftInput(et, 0)
                }
            }
        }, 200)
    }


    /**
     * 隐藏键盘
     */
    fun hideSoftKeyBoard(activity: Activity) {
        val imm =
            BpApplication.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        val v = activity.window.peekDecorView()
        if (null != v) {
            imm.hideSoftInputFromWindow(v.windowToken, 0)
        }
    }

}